﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using FrbaBus.Properties;

namespace FrbaBus.AbmMicro
{
    public partial class FormDatosBajaServicio : Form
    {

        private long micro;
  
        public FormDatosBajaServicio(long codigoMicro)
        {
            InitializeComponent();

            this.micro = codigoMicro;
            btnCancelarPE.Visible = false;
            btnSuplantar.Visible = false;

        }

        private void FormDatosBajaServicio_Load(object sender, EventArgs e)
        {

        }

        private void btnProcesar_Click(object sender, EventArgs e)
        {
            string sConnectionString = Settings.Default.GD1C2013ConnectionString;
            SqlConnection connection = new SqlConnection(sConnectionString);
            SqlCommand cmd = new SqlCommand("THE_BEST_IAS.pr_tiene_viajes", connection);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = this.micro;
            cmd.Parameters.Add(new SqlParameter("@p_fecha_inicial", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
            cmd.Parameters.Add(new SqlParameter("@p_fecha_final", SqlDbType.DateTime)).Value = Convert.ToDateTime(txFecha.Text);
            cmd.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
            cmd.CommandTimeout = 1000;

            connection.Open();
            cmd.ExecuteNonQuery();

            int valorRetorno = Convert.ToInt32(cmd.Parameters["@returnValue"].Value);
            
            connection.Close();
            
            if (valorRetorno == 1)
            {
                //POR ULTIMO, HAGO LA BAJA EFECTIVA POR FUERA DE SERVICIO DEL MICRO
                sConnectionString = Settings.Default.GD1C2013ConnectionString;
                connection = new SqlConnection(sConnectionString);
                cmd = new SqlCommand("THE_BEST_IAS.pr_deshabilita_micro", connection);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = this.micro;
                cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
                cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_reinicio", SqlDbType.DateTime)).Value = Convert.ToDateTime(txFecha.Text);

                cmd.CommandTimeout = 1000;

                connection.Open();
                cmd.ExecuteNonQuery();

                connection.Close();

                MessageBox.Show("El micro se dió de baja por fuera de servicio", "INFORMACION");
            }

            if (valorRetorno == 0)
            {

                MessageBox.Show("Este micro tiene viajes programados, por favor, CANCELA los mismos o TRASPASASELOS a otra unidad");
                btnCancelarPE.Visible = true;
                btnSuplantar.Visible = true;
                btnProcesar.Enabled = false;
                btnCancelar.Enabled = false;
                txFecha.Enabled = false;

            }

        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void btnCancelarPE_Click(object sender, EventArgs e)
        {

            string sConnectionString = Settings.Default.GD1C2013ConnectionString;
            SqlConnection connection = new SqlConnection(sConnectionString);
            SqlCommand cmd = new SqlCommand("THE_BEST_IAS.pr_cancelar_viajes_programados", connection);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = this.micro;
            cmd.Parameters.Add(new SqlParameter("@p_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
            cmd.Parameters.Add(new SqlParameter("@p_fecha_reinicio", SqlDbType.DateTime)).Value = Convert.ToDateTime(txFecha.Text);

            //cmd.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
            cmd.CommandTimeout = 1000;

            connection.Open();
            cmd.ExecuteNonQuery();

            //int valorRetorno = Convert.ToInt32(cmd.Parameters["@returnValue"].Value);

            connection.Close();

            //if (valorRetorno == 0)
            //{
            //}

            sConnectionString = Settings.Default.GD1C2013ConnectionString;
            connection = new SqlConnection(sConnectionString);
            cmd = new SqlCommand("THE_BEST_IAS.pr_deshabilita_micro", connection);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = this.micro;
            cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
            cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_reinicio", SqlDbType.DateTime)).Value = Convert.ToDateTime(txFecha.Text);

            cmd.CommandTimeout = 1000;

            connection.Open();
            cmd.ExecuteNonQuery();

            connection.Close();

            MessageBox.Show("Se han cancelado los viajes del micro " + this.micro + " y se lo ha dado de baja por fuera de servicio.");

            this.Hide();

            FormAbmMicro form = new FormAbmMicro();
            form.ShowDialog(this);
        }

        private void btnSuplantar_Click(object sender, EventArgs e)
        {

            string sConnectionString = Settings.Default.GD1C2013ConnectionString;
            SqlConnection connection = new SqlConnection(sConnectionString);
            SqlCommand cmd = new SqlCommand("THE_BEST_IAS.pr_puede_suplantar", connection);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@p_mic_codigo_origen", SqlDbType.BigInt)).Value = this.micro;
            cmd.Parameters.Add(new SqlParameter("@p_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
            cmd.Parameters.Add(new SqlParameter("@p_fecha_reinicio", SqlDbType.DateTime)).Value = Convert.ToDateTime(txFecha.Text);

            //cmd.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
            cmd.CommandTimeout = 1000;

            connection.Open();
            SqlDataReader dr2 = cmd.ExecuteReader();

            //int valorRetorno = Convert.ToInt32(cmd.Parameters["@returnValue"].Value);



            //if (valorRetorno == 0)
            //{
            //}

            if (dr2.HasRows)
            {
                if (dr2.Read())
                {
                    //TRASPASO
                    long microSuplente = Convert.ToInt64(dr2["mic_codigo"].ToString());

                    sConnectionString = Settings.Default.GD1C2013ConnectionString;
                    connection = new SqlConnection(sConnectionString);
                    cmd = new SqlCommand("THE_BEST_IAS.pr_traspasar_viajes", connection);
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new SqlParameter("@p_mic_codigo_origen", SqlDbType.BigInt)).Value = this.micro;
                    cmd.Parameters.Add(new SqlParameter("@p_mic_codigo_suplente", SqlDbType.BigInt)).Value = microSuplente;
                    cmd.Parameters.Add(new SqlParameter("@p_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
                    cmd.Parameters.Add(new SqlParameter("@p_fecha_reinicio", SqlDbType.DateTime)).Value = txFecha.Text;

                    cmd.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                    cmd.CommandTimeout = 1000;

                    connection.Open();
                    cmd.ExecuteNonQuery();

                    int valorRetorno = Convert.ToInt32(cmd.Parameters["@returnValue"].Value);

                    connection.Close();

                    if (valorRetorno == 0)
                    {
                        //TRASPASO OK --> LLAMO A LA BAJA POR FUERA DE SERVICIO

                        sConnectionString = Settings.Default.GD1C2013ConnectionString;
                        connection = new SqlConnection(sConnectionString);
                        cmd = new SqlCommand("THE_BEST_IAS.pr_deshabilita_micro", connection);
                        cmd.CommandType = CommandType.StoredProcedure;

                        cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = this.micro;
                        cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
                        cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_reinicio", SqlDbType.DateTime)).Value = Convert.ToDateTime(txFecha.Text);

                        cmd.CommandTimeout = 1000;

                        connection.Open();
                        cmd.ExecuteNonQuery();

                        connection.Close();

                        MessageBox.Show("El micro " + this.micro + " se dió de baja por fuera de servicio luego de habersele traspasado sus viajes al micro " + microSuplente, "INFORMACION");
                    }
                    if (valorRetorno == 1)
                    {
                        MessageBox.Show("ERROR 1 DE TRASPASAR");
                    }
                    if (valorRetorno == 2)
                    {
                        MessageBox.Show("ERROR 2 DE TRASPASAR");
                    }
                }
            }
            else
            {
                //SI NO HAY MICRO QUE PUEDA SUPLANTAR LLAMO AL ALTA DE MICRO
                this.Hide();

                FormAltaMicroTraspaso form = new FormAltaMicroTraspaso(this.micro, txFecha.Text);
                form.ShowDialog(this);

            }
        }

        private void buSelFecha_Click(object sender, EventArgs e)
        {
            calendario.Visible = !calendario.Visible;
        }

        private void calendario_DateChanged(object sender, DateRangeEventArgs e)
        {
            //Obtener la fecha
            txFecha.Text = calendario.SelectionEnd.ToShortDateString();

        }

        private void calendario_Leave(object sender, EventArgs e)
        {
            //Hacer invisible si pierde el foco
            calendario.Hide();
        }
    }
}
               

             

